﻿namespace Lesson__冒泡排序
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("冒泡排序");

            #region 知识点一 排序的基本概念
            //排序是计算机内经常进行的一种操作，其目的是将一组“无序”的记录序列调整为“有序”的记录序列
            //常用的排序例子
            // 2、3、1、5、4
            //把上面的这个无序序列 变为 有序序列的过程称
            // 1、2、3、4、5（升序排序）
            // 5、4、3、2、1（降序排序）

            //在程序中 序列一般 储存在数组中
            //所以 排序往往是对 数组进行排序
            #endregion

            #region 知识点二 冒泡排序基本原理
            // 2、3、1、5、4
            // 两两相邻
            // 不停比较
            // 不停交换
            // 比价n轮
            #endregion

            #region 知识点三 代码实现
            //第一步 如何比较数组中两两相邻的数
            //8, 7, 1, 5, 4, 2, 6, 3, 9
            //从头开始
            //第n个数和第n+1个数比较
            int[] arr = new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 };

            //第三步 换m轮
            //有几个数 就比较多少轮
            bool isSort = false;
            for (int m = 0; m < arr.Length; m++)
            {
                //第四步 优化
                //1.确定位置的数字 不用比较了
                //2.如果排序几轮就结束 在比较就会浪费CPU资源 要此就结束
                isSort = false;
                for (int n = 0; n < arr.Length - 1 - m; n++)
                {
                    //如果 第n个数比第n+1个数大 则交换
                    if (arr[n] > arr[n + 1])
                    {
                        isSort = true;
                        //第二步 交换位置
                        //中间商不赚差价
                        int temp = arr[n];
                        arr[n] = arr[n + 1];
                        arr[n + 1] = temp;
                    }
                    Console.Write(arr[n]);
                }
                Console.WriteLine();
                if (!isSort)
                {
                    break;
                }
            }
            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }
            #endregion
        }
    }
}
